//package com.graduationproject.filter;
//
//import com.alibaba.fastjson.JSON;
//import com.graduationproject.Util.Jwt;
//import com.graduationproject.common.R;
//import jakarta.servlet.*;
//import jakarta.servlet.annotation.WebFilter;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.util.AntPathMatcher;
//import java.io.IOException;
//
//
///**
// * 拦截器，拦截请求
// * @author shkstart
// * @create 2023-08-25-14:59
// */
//@WebFilter(filterName = "LoginCheckFilter",urlPatterns = "/*")
//public class LoginCheckFilter implements Filter {
//    @Autowired
//    private Jwt jwt;
//    //路径匹配器，支持通配符
//    public static final AntPathMatcher PATH_MATCHER=new AntPathMatcher();
//    @Override
//    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//        HttpServletRequest request =(HttpServletRequest) servletRequest;
//        HttpServletResponse response =(HttpServletResponse) servletResponse;
//        //1.获取本次请求的URI
//        String requestURI = request.getRequestURI();
//        //定义不需要处理的请求路径
//        String[] urls =new String[] {
//                "/api/user/login",
//                "/api/user/register"
//
//        };
//        //2.判断本次请求是否需要处理
//        boolean check = check(urls, requestURI);
//        //3.如果不需要处理，则直接放行
//        if(check){
//            //放行
//            filterChain.doFilter(request,response);
//            return;
//        }
//        //4-1.判断登录状态，如果已经登陆，则直接放行
//        if(request.getHeader("token")!=null){
//            String token = request.getHeader("token");
//            boolean b = jwt.validateToken(token);
//            //放行
//            if(b){
//                filterChain.doFilter(request,response);
//                return;
//            }else {
//                response.getWriter().write(JSON.toJSONString(R.error("token验证失败")));
//            }
//
//        }else {
//            //        5.如果未登录，则返回未登录结果，通过输出流的方式向客户端响应数据
//            response.getWriter().write(JSON.toJSONString(R.error("NOLOGIN")));
//            return;
//        }
//    }
//
//    /**
//     * 路径匹配，检查本次请求是否需要放行
//     * @param urls
//     * @param requestURI
//     * @return
//     */
//    public boolean check(String[] urls,String requestURI){
//        for (String url:urls){
//            boolean match = PATH_MATCHER.match(url, requestURI);
//            if(match) {
//                return true;
//            }
//        }
//        return false;
//    }
//}
